iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
AI & Data

Rosalind 生物資訊解題系統系列 第 5

Day05 | Rosalind 生資解題 - IN4. Conditions and Loops +奇偶數判斷

  • 分享至 

  • xImage
  •  

Day05 | Rosalind 生資解題 -IN4. Conditions and Loops +奇偶數判斷

題目連結:https://rosalind.info/problems/ini4/

https://ithelp.ithome.com.tw/upload/images/20250915/20125192jeXVvbkc0U.png

輸入:

100 200

輸出:

7500

計算所有在 a ~ b 之間的奇數數字

python 沒有內建 isOdd() 函式,所以只能寫if判斷奇數、偶數

解法一

a, b = 100, 200

total = 0  # 如果用sum作為變數名稱會與內建函數沖突。如果取名為s會誤以為是string縮寫

for i in range(a, b+1):
    if i % 2 == 1:
       total += iprint(total)

解法二

也有人使用 i&1 來做計算:某數字是不是經過 "and musk 1" 之後為True

這概念在底層語言(例如C語言)效能上會快很多
但由於Python在實作方式的關係,這樣寫的運行速度不會比較快

程式碼:

if x & 1:
    return 'odd'
else:
    return 'even'

解法三

迴圈解的解法,時間複雜度是O(n)

當數字量非常大的時候

(頭+尾) x N / 2
此時可以運用公式解法(等差數列求和)

將頭尾數字相加,乘以項數(將數字差除以2)
ex: 1~9 => 1+3+5+7+9 = (1+9)*5/2 = 25
ex: 0~10 => 1+3+5+7+9 = (1+9)*5/2 = 25,計算結果同上

但是要先取邊界將數值調整為1與9(調整至奇數)

程式碼:

a, b = 100, 200

# 如果a, b是偶數,則調整為奇數
if a % 2 == 0:
    a += 1
if b % 2 == 0:
    b -= 1

# 也可這樣寫,如果a是偶數則+1;如果b是偶數,則-1
# a += a % 2 == 0
# b -= b % 2 == 0

n = (b - a) // 2 + 1 # 奇數項數
total = n * (a + b) // 2

print(total)

公式解法,時間複雜度為O(1),可大幅解省執行所需時間


上一篇
Day04 | Rosalind 生資解題 - IN3. Strings and Lists
下一篇
Day06 | Rosalind 生資解題 - IN5. Working with Files +讀檔操作
系列文
Rosalind 生物資訊解題系統7
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言